home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / UNIXLIB37B / test / c / qtest < prev    next >
Text File  |  1991-01-30  |  1KB  |  92 lines

  1. /* qtest.c - qsort() test program (c) Copyright 1990 H.Rogers */
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <time.h>
  6.  
  7. #define A_TYPE int
  8. #define A_SIZE 4096
  9.  
  10. static int c(const void *i1,const void *i2)
  11. {
  12. return(*(A_TYPE *)i1 - *(A_TYPE *)i2);
  13. }
  14.  
  15. static clock_t qtest(A_TYPE *a)
  16. {
  17. clock_t t;
  18.  
  19. t = clock();
  20. qsort(a,A_SIZE,sizeof(A_TYPE),c);
  21. t = clock() - t;
  22.  
  23. return(t);
  24. }
  25.  
  26. static void qvrfy(A_TYPE *a)
  27. {
  28. register int i,j;
  29.  
  30. for (i = 0; i < A_SIZE - 1; )
  31.   {
  32.   j = a[i];
  33.   if (j > a[++i]) goto err;
  34.   }
  35. return;
  36.  
  37. err: printf("not sorted: &a[i] = %#x\ti = %d\n",&a[i],i); exit(1);
  38. }
  39.  
  40. int main(int argc,char **argv)
  41. {
  42. register A_TYPE *a;
  43. register int i;
  44. int n,j;
  45. clock_t t;
  46.  
  47. if (argc != 2)
  48.   {
  49.   puts("usage: qtest ntest");
  50.   exit(1);
  51.   }
  52.  
  53. n = atoi(argv[1]);
  54.  
  55. if (!(a = malloc(sizeof(A_TYPE) * A_SIZE)))
  56.   {
  57.   perror("qtest");
  58.   exit(1);
  59.   }
  60.  
  61. srand(time(0)); t = 0;
  62.  
  63. for (j = 0; j < n; j++)
  64.   {
  65.   clock_t q;
  66.  
  67.   for (i = 0; i < (A_SIZE>>1); i++)
  68.     a[i] = (A_TYPE)rand() & 0xff;
  69.   for (; i < A_SIZE; i++)
  70.     a[i] = (A_TYPE)rand();
  71.  
  72.   q = qtest(a);
  73.  
  74.   printf("random data time: %d.%02d\n",q / 100,q % 100);
  75.  
  76.   qvrfy(a);
  77.  
  78.   t += q;
  79.   }
  80.  
  81. t /= n; printf("average: %d.%02d\n",t / 100,t % 100);
  82.  
  83. for (i = 0; i < A_SIZE; i++)
  84.   a[i] = 0;
  85.  
  86. t = qtest(a);
  87.  
  88. qvrfy(a);
  89.  
  90. printf("zero data time: %d.%02d\n",t / 100,t % 100);
  91. }
  92.